package main

import (
	"fmt"
	"log"

	"ser1/config"
	_ "ser1/docs" // 引入 Swagger 文档
	"ser1/router"

	"github.com/joho/godotenv"

	"github.com/gin-gonic/gin"
	swaggerFiles "github.com/swaggo/files"     // 引入 Swagger 文件
	ginSwagger "github.com/swaggo/gin-swagger" // 引入 Gin Swagger 中间件
)

// func swaggerEnable(port string, r *gin.Engine) {
// 	// 检查是否启用Swagger
// 	if config.GetField("SWAGGER_ENABLED") == "1" {
// 		// 注册Swagger路由
// 		r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
// 		// 打印 Swagger URL
// 		fmt.Println("http://127.0.0.1:" + port + "/swagger/index.html")
// 	}
// }

// main 程序入口函数
// @Description 初始化系统组件，配置路由并启动服务器
func main() {
	// 加載 .env 文件
	if err := godotenv.Load(); err != nil {
		log.Println("無法載入 .env 文件，可能未找到或發生錯誤:", err)
	}

	// // 驗證 SECRET_KEY 環境變數
	// secretKey := os.Getenv("SECRET_KEY")
	// if secretKey == "" {
	// 	log.Fatal("環境變數 SECRET_KEY 未設置，請檢查 .env 文件或系統環境變數")
	// }

	// // 初始化 Redis 连接
	// if err := redisdb.InitRedis(); err != nil {
	// 	log.Fatalf("Failed to initialize Redis connection: %v", err)
	// }

	// 创建 Gin 引擎
	gin.SetMode(gin.ReleaseMode) // 在生产环境中设置为发布模式以提高性能
	r := gin.New()

	// 根据环境变量决定是否启用请求日志
	// REQUEST_LOG_ENABLED=1 时启用详细请求日志
	if config.GetField("REQUEST_LOG_ENABLED") == "1" {
		r.Use(gin.Logger())
	}

	// 添加恢复中间件，用于处理panic并返回500错误
	r.Use(gin.Recovery())

	// 获取服务器端口配置
	port := config.GetField("SERVER_PORT")

	// 设置路由
	router.SetupRouter(r)

	// // 启用Swagger
	// swaggerEnable(port, r)

	// 启动服务器
	if err := r.Run(":" + port); err != nil {
		log.Fatalf("Failed to start server: %v", err)
	}
}
